{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a9ae70fe-d747-442a-870d-f97bc4037adf",
   "metadata": {},
   "outputs": [],
   "source": [
    "from osgeo import gdal #导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5d5d1b64-3262-44b8-9fe3-751302b7c709",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'GEOGCS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",SPHEROID[\"WGS 84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST]]'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "filename = r'data/S2_20190727San_EPSG4326.tif'\n",
    "dataset = gdal.Open(filename) #打开文件\n",
    "dataset.GetProjection() #坐标投影信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9e28f25e-4d18-4b66-9872-9b111d7b2c27",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4, 1065, 983)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.ReadAsArray().shape #栅格形状信息[波段数，行，列]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8cd30ac3-d6c8-4c02-a996-dbf1ec11b29e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(112.47574418774602,\n",
       " 0.00010437267353919009,\n",
       " 0.0,\n",
       " 30.280864326445503,\n",
       " 0.0,\n",
       " -0.00010437267353918963)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.GetGeoTransform() #仿射变换信息"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc160e42-8c31-414c-8dfe-0e071f110073",
   "metadata": {},
   "source": [
    "1. **整体介绍**\n",
    "   - `GetGeoTransform()`方法返回的仿射变换信息是一个包含6个参数的元组，这些参数用于建立影像的像元坐标（以像元为单位的行列坐标）与地理空间实际坐标（如经纬度或者投影坐标）之间的转换关系。\n",
    "\n",
    "2. **参数意义（假设元组为`(gt[0], gt[1], gt[2], gt[3], gt[4], gt[5])`）**\n",
    "   - **`gt[0]`（`upper_left_x`）**：\n",
    "     - 这个参数表示影像左上角像元中心的x轴（通常是经度方向或者地图投影后的x坐标方向）地理坐标。它是影像在地理空间中起始位置的x坐标值，确定了影像在水平方向上的起始位置。\n",
    "     - 例如，在一个地理坐标系为WGS84（经纬度坐标系）的遥感影像中，如果`gt[0]`的值为 - 120.0，表示影像左上角像元中心的经度是 - 120.0度。\n",
    "   - **`gt[1]`（`pixel_size_x`）**：\n",
    "     - 它代表x方向（水平方向）上的像元尺寸，也就是影像在x方向上的分辨率。其值为正数时，表示从左向右（沿着行方向）像元坐标增加时，地理坐标也是增加的。\n",
    "     - 例如，如果`gt[1]`的值是0.001（单位假设是度），这意味着在水平方向上，每向右移动一个像元，地理经度坐标就增加0.001度。这个参数与`gt[0]`一起，用于将像元的列坐标转换为地理x坐标。\n",
    "   - **`gt[2]`（`rotation_x`）**：\n",
    "     - 这个参数用于描述影像在x方向上的旋转情况。在一般情况下，对于非旋转的遥感影像（大多数常规遥感影像都是如此），这个值为0。\n",
    "     - 当影像存在旋转时，它会根据旋转角度产生一个非零值。其具体的计算涉及到影像旋转的几何关系，例如，它与像元坐标和地理坐标之间的旋转角度有关，通过三角函数来参与坐标转换计算。\n",
    "   - **`gt[3]`（`upper_left_y`）**：\n",
    "     - 表示影像左上角像元中心的y轴（通常是纬度方向或者地图投影后的y坐标方向）地理坐标。它确定了影像在垂直方向上的起始位置。\n",
    "     - 例如，在地理坐标系为WGS84的情况下，如果`gt[3]`的值是30.0，意味着影像左上角像元中心的纬度是30.0度。\n",
    "   - **`gt[4]`（`rotation_y`）**：\n",
    "     - 用于描述影像在y方向上的旋转情况。和`gt[2]`类似，在非旋转影像中一般为0。当影像旋转时，它会参与到像元坐标与地理y坐标之间的转换计算中，与旋转角度的三角函数关系有关。\n",
    "   - **`gt[5]`（`pixel_size_y`）**：\n",
    "     - 代表y方向（垂直方向）上的像元尺寸，即影像在y方向上的分辨率。当值为正数时，表示从上向下（沿着列方向）像元坐标增加时，地理坐标是减少的（这是因为在地理坐标系中，纬度是从赤道向两极递减的）。\n",
    "     - 例如，如果`gt[5]`的值是 - 0.001（单位假设是度），那么每向下移动一个像元，地理纬度坐标就减少0.001度。这个参数与`gt[3]`一起，用于将像元的行坐标转换为地理y坐标。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f9da9158-965b-4a8e-a1dd-afe0812f076d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'PROJCS[\"WGS 84 / UTM zone 51N\",GEOGCS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",SPHEROID[\"WGS 84\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "filename = r'data/S2_20190727San.tif'\n",
    "dataset = gdal.Open(filename) #打开文件\n",
    "dataset.GetProjection() #坐标投影信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "270a2a87-6802-4079-bd30-8f59b8683184",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-515060.0, 10.0, 0.0, 3396420.0, 0.0, -10.0)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.GetGeoTransform() #仿射变换信息"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
